# -*- coding: utf-8 -*-
# @Author : felix


# 局部变量
# def fun1():
#     # 定义变量
#     token = '111'
#
#     # 直接使用
#     print(token)


# 定义全局变量,先声明，后赋值---框架层面，是不建议的

def fun1():
    global token
    # 定义变量
    token = '111'

    # 直接使用
    print(token)

def fun2():

    print(token)   # 不可以直接使用，会报错，局部变量，可以使用全局变量解决


# 框架层面，不建议使用global, 解决使用: pytest 中的fixture --前置:setup_XXX
# 一般写在 conftest 文件中  这个只能解决一个token前置
# 在接口关联中，不仅仅需要一个token，还有其他数据需要使用

"""
接口关联：

第一步，定义全局变量，用来存在接口关联中的数据
全局变量 ---字典格式存储
内置属性 --外部不可修改
提供对应的方法: 可以对这个属性进行修改，增加，显示 ---设置 globalContext.py 实现

第二步: 需要将提取的数据放到全局变量中
封装： 通过响应数据进行数据提取 ---jsonpath ----关键字封装   Keywords.py



"""





"""
封装日志：同步到文件及控制台
几个重要的概念：
- Logger 记录器暴露了应用程序代码直接使用的接口。
- Handler 处理器将日志记录（由记录器创建）发送到适当的目标。
- Filter 过滤器提供了更细粒度的功能，用于确定要输出的日志记录。
- Formatter 格式器指定最终输出中日志记录的样式。
"""
import logging
import os
from logging.handlers import RotatingFileHandler

class Logger:
    def __init__(self, name, log_file, level=logging.DEBUG):
        self.logger = logging.getLogger(name)
        self.logger.setLevel(level)
        # 创建日志格式
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        # 创建文件处理器
        file_handler = RotatingFileHandler(log_file, maxBytes=1048576, backupCount=3)
        file_handler.setFormatter(formatter) # 设置格式
        self.logger.addHandler(file_handler) # 添加到对应的处理器中
        # 创建控制台处理器
        console_handler = logging.StreamHandler()
        console_handler.setFormatter(formatter)
        self.logger.addHandler(console_handler)


if __name__ == '__main__':
# 创建日志实例
    logger = Logger('my_logger', '.\log.log')
    # 输出日志
    logger.logger.debug('This is a debug message')
    logger.logger.info('This is an info message')
    logger.logger.warning('This is a warning message')
    logger.logger.error('This is an error message')
    logger.logger.critical('This is a critical message')
